#ifndef TCPSERVER_H
#define TCPSERVER_H

#include <QTcpServer>
#include <QTcpSocket>
#include <QObject>

class TcpServer : public QTcpServer {
    Q_OBJECT
public:
    explicit TcpServer(QObject *parent = nullptr);
    ~TcpServer();

    bool startServer(quint16 port); // 启动服务器
    void stopServer(); // 停止服务器

    void sendDataToClient(const QString &ip, quint16 port, const QByteArray &data); // 发送数据到指定客户端
    void sendDataToAllClients(const QByteArray &data); // 发送数据到所有客户端

signals:
    void clientConnected(const QString &ip, quint16 port); // 客户端连接信号
    void clientDisconnected(const QString &ip, quint16 port); // 客户端断开信号
    void dataReceived(const QString &ip, quint16 port, const QByteArray &data); // 数据接收信号

protected:
    void incomingConnection(qintptr socketDescriptor) override;

private slots:
    void onReadyRead(); // 处理数据接收
    void onDisconnected(); // 处理客户端断开连接

private:
    QList<QTcpSocket*> clients; // 保存已连接的客户端
    QHash<QTcpSocket*, QPair<QString, quint16>> clientInfo; // 保存客户端的IP和端口信息
};

#endif // TCPSERVER_H
